Функции
Введение в функции. Что такое функции? Функции - это полезный инструмент, который помогает упростить код, разделяя его по функциональности и уменьшая повторы. Понимание функций - это ключ к превращению в успешного кодера. В Lua определение функций в основном выглядит так: function FunctionName() --Do stuff end Но в некоторых случаях может выглядеть как обычная переменная: FunctionName = function() --Do stuff end Оба метода дают одинаковый результат, поэтому каждый программист выбирает для себя. Поскольку функции считаются обычными переменными, возможно копирование функции в другую переменную: NewFunctionName = OldFunctionName Заметьте, что здесь мы не используем скобки "()", поскольку мы используем OldFunctionName в качестве переменной, а не функции. Как использовать функции? Скорее всего, если вы следовали обучению с самого начала, вы уже использовали функции (в обучении Hello World). Без стандартных встроенных функций, таких как write() и print(), было бы невозможно взаимодействовать с пользователем. Когда вы видите скобки после названия переменной, вы понимаете, что это функция. В качестве нашего первого примера мы напишем простую функцию, которая будет использовать write(): function MyFunction(Str) write(Str) end MyFunction("I am writing text to the screen!\n") Если вы успешно написали и запустили этот скрипт, он должен вывести "I am writing text to the screen!" на экран. Заметим, что у функции есть имя переменных в скобках. Это называется "аргументом" и будет важным для ваших функций позже. Это может быть любое количество аргументов, разделенных запятыми. Аргументы могут быть переменной любого типа, включая другие функции. Также очень важно вызывать ваши функции после того, как вы их определили, иначе вы получите ошибку "attempt to call nil". Добавьте следующие строки к вашему коду: MyFunction( true ) Это передаст логическое значение вашей функции и вызовет ошибку, когда выполнение достигнет write(), который не может использовать логическое значение. Чтобы исправить это, нам нужно проверить, какого типа переменная была передана. Попробуйте преобразовать свою функцию, чтобы она выглядела так: function MyFunction( Str ) if type(Str) ~= "string" then return end write( Str ) end MyFunction( "I am writing text to the screen!\n" ) MyFunction( true ) Функция "type" возвращает вам строку с типом переменной, которую вы в нее передадите. В этом случае, если переменная не строковая, будет выполнен "return". Return будет описан позже в этой статье, но на данный момент все, что нам нужно знать, что оно завершает функцию, поэтому любой код после нее не будет выполнен. Если вы запустите свой скрипт сейчас, вы увидите, что не будет ошибки, когда будет попытка использовать логическое значение. Фактически, не произойдет совсем ничего, что не может быть приемлемо. Измените строку с проверкой, чтобы она выглядела так: if type(Str) ~= "string" then write("Bad argument #1 to MyFuction: String expected, got "..type(Str).."!\n") return end Если вы запустите свой код снова, вы увидите, что она выдает ошибку, когда достигает логического значения. Разница между этим и обычной командой error(), вызываемой обычной ошибкой, в том, что это не вызовет выхода из кода и последующие строки будут выполнены как обычно. Все, что этот скрипт делает на самом деле - это дает новое имя функции write(), поэтому есть более простой способ это сделать. Перед чтением следующего кода, подумайте, можете ли вы с вашими знаниями на текущий момент сами найти этот способ. Самый простой способ задать новое имя для функции таков: MyFunction = write Это означает, что любой вызов MyFunction() будет действовать так, как действовала бы функция write(). Заметим, что любые изменения с write() после этой строки не изменит функции MyFunction, поэтому этот метод часто используется, чтобы сохранить встроенные функции перед тем, как они будут перезаписаны. Например, кто-то может захотеть отключить функцию write(), но все же хочет иметь метод использовать ее, когда необходимо. MyFunction = write write = function() MyFunction("This function has been disabled!\n") end Это выведет "This function has been disabled!" каждый раз, когда кто-то попытается вызвать write(). Return Иногда вам хочется, чтобы функция возвращала значение, когда ее выполнение завершено. Это назначение "return". Он вернет одно или более значений после выполнения функции. local function RandomNumber() local rand = math.random(0,10) return rand end local Num = RandomNumber() Это запишет в Num случайное число между 0 и 10. Заметим, что в этом случае мы записываем () после имени функции при вызове. Это означает, что мы вызываем функцию и присваиваем возвращаемое ей значение, а не пытаемся присвоить переменной саму функцию. Категория:Обучение